package com.zeng.sim.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zeng.sim.controller.domain.SysDictData;
import com.zeng.sim.controller.domain.request.PageDomain;
import com.zeng.sim.mapper.SysDictDataMapper;
import com.zeng.sim.mapper.model.SysDictDataEntity;
import com.zeng.sim.service.SysDictDataService;
import com.zeng.sim.util.SimConstant;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author zengwanlin
 * @since 2023-12-20
 */
@Service
public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictDataEntity>
        implements SysDictDataService {

    @Override
    public Page<SysDictData> pageQuery(SysDictData sysDictData, PageDomain pageDomain) {
        Page page = Page.of(pageDomain.getPage(), pageDomain.getLimit());
        LambdaQueryWrapper<SysDictDataEntity> wrapper = new LambdaQueryWrapper<>();
        if (StringUtils.hasLength(sysDictData.getTypeCode())) {
            wrapper.eq(SysDictDataEntity::getTypeCode, sysDictData.getTypeCode());
        }
        if (StringUtils.hasLength(sysDictData.getDataValue())) {
            wrapper.like(SysDictDataEntity::getDataValue, sysDictData.getDataValue());
        }
        if (StringUtils.hasLength(sysDictData.getDefaultFlag())) {
            wrapper.eq(SysDictDataEntity::getDefaultFlag, sysDictData.getDefaultFlag());
        }
        wrapper.orderByAsc(SysDictDataEntity::getSort);
        page(page, wrapper);

        List<SysDictDataEntity> recordList = page.getRecords();
        List<SysDictData> list = new ArrayList<>(recordList.size());
        for (SysDictDataEntity entity : recordList) {
            SysDictData dictData = new SysDictData();
            dictData.setDataId(entity.getDataId());
            dictData.setDataLabel(entity.getDataLabel());
            dictData.setDataValue(entity.getDataValue());
            dictData.setTypeCode(entity.getTypeCode());
            dictData.setDefaultFlag(entity.getDefaultFlag());
            dictData.setValidFlag(entity.getValidFlag());
            dictData.setCreateBy(entity.getCreateBy());
            dictData.setUpdateBy(entity.getUpdateBy());
            dictData.setRemark(entity.getRemark());
            list.add(dictData);
        }
        page.setRecords(list);
        return page;
    }

    @Override
    public boolean saveSysDictData(SysDictData sysDictData) {
        SysDictDataEntity entity = new SysDictDataEntity();
        entity.setDataValue(sysDictData.getDataValue());
        entity.setDataLabel(sysDictData.getDataLabel());
        entity.setTypeCode(sysDictData.getTypeCode());
        entity.setDefaultFlag(sysDictData.getDefaultFlag());
        entity.setValidFlag(sysDictData.getValidFlag());
        entity.setSort(sysDictData.getSort());
        entity.setRemark(sysDictData.getRemark());
        return save(entity);
    }

    @Override
    public boolean updateSysDictData(SysDictData sysDictData) {
        SysDictDataEntity entity = new SysDictDataEntity();
        entity.setDataId(sysDictData.getDataId());
        entity.setDataValue(sysDictData.getDataValue());
        entity.setDataLabel(sysDictData.getDataLabel());
        entity.setDefaultFlag(sysDictData.getDefaultFlag());
        entity.setValidFlag(sysDictData.getValidFlag());
        entity.setSort(sysDictData.getSort());
        entity.setRemark(sysDictData.getRemark());
        return updateById(entity);
    }

    @Override
    public boolean valid(Integer dataId) {
        SysDictDataEntity entity = new SysDictDataEntity();
        entity.setDataId(dataId);
        entity.setValidFlag(SimConstant.VALID_FLAG_1);
        return updateById(entity);
    }

    @Override
    public boolean invalid(Integer dataId) {
        SysDictDataEntity entity = new SysDictDataEntity();
        entity.setDataId(dataId);
        entity.setValidFlag(SimConstant.VALID_FLAG_0);
        return updateById(entity);
    }

    @Override
    public List<SysDictData> selectByTypeCode(String typeCode) {
        LambdaQueryWrapper<SysDictDataEntity> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysDictDataEntity::getTypeCode, typeCode)
            .eq(SysDictDataEntity::getValidFlag, SimConstant.VALID_FLAG_1);
        List<SysDictDataEntity> dictDataEntityList = list(wrapper);

        List<SysDictData> list = new ArrayList<>(dictDataEntityList.size());
        for (SysDictDataEntity entity : dictDataEntityList) {
            SysDictData sysDictData = new SysDictData();
            BeanUtils.copyProperties(entity, sysDictData);
            list.add(sysDictData);
        }
        return list;
    }

}
